/**
 * 题目描述
 * 
 * 请说出下列代码最终的执行结果，并解释原因
 * 
 */

var tmp = 123

if (true) {
    console.log(tmp)
    let tmp
}

// 报错 tmp is not defined
// 原因: 只要块级作用域内存在let命令，它所声明的变量就绑定在这个块级作用域内，不受外部变量影响。
//       ES6中规定，如果区块中存在let和const命令，这个区块对这些命令声明的变量，从一开始就形成
//       了封闭作用域。凡是在声明之前对这些命令进行读取操作，就会报错。在语法上，这种情况称为
//       “暂时性死区”